System Macros

The KCL interpreter implements the following system macros as if they were special forms. That is, macro forms of the following macros are directly evaluated without being macro-expanded.

    and       case      cond      decf      defmacro  defun
    do        do*       dolist    dotimes   incf      locally
    loop      multiple-value-bind           multiple-value-list
    multiple-value-setq           or        pop       prog
    prog*     prog1     prog2     psetq     push      return
    setf      unless    when

For these macro forms, the functions macro-function and special-form-p both return non-nil values: macro-function returns the macro expansion function and special-form-p returns t. Of course, functions such as macroexpand and macroexpand-1 will successfully expand macro forms for these system macros.